IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='spRpt_CartulinasDetalladas' and XTYPE='P')
BEGIN
	DROP PROCEDURE [dbo].[spRpt_CartulinasDetalladas]
END
GO
CREATE PROCEDURE [dbo].[spRpt_CartulinasDetalladas]
	 @OP VARCHAR(64)=NULL
	,@ParamAuxiliar NVARCHAR(MAX)=NULL   /* PARAMETRO AUXILIAR */
	,@Fecha_Ini DATE = NULL
	,@Fecha_Fin DATE = NULL
WITH ENCRYPTION
AS
SET NOCOUNT ON
BEGIN TRY

--DECLARE @AUX VARCHAR(2048)
declare @Consulta NVARCHAR(MAX)
declare @Consulta_ISNULL NVARCHAR(1024)

IF EXISTS (SELECT NAME FROM tempdb..sysobjects WHERE name LIKE '##Obligaciones_Temporal%' AND XTYPE='U')
BEGIN
	DROP TABLE [##Obligaciones_Temporal]
END	

/*****     Imprimir    *****/
IF @OP = 'Imprimir'
BEGIN
	
	SET @Consulta = 
		STUFF((
				SELECT		',' + QUOTENAME(UPPER(o.Descripcion))
				FROM		Obligacion o
				ORDER BY	o.CodObligacionTipo,o.orden ASC
				FOR XML PATH(''), TYPE
			).value('.', 'NVARCHAR(MAX)'),1,1,'')
	
	SET @Consulta_ISNULL = 
		STUFF((
				SELECT		', ISNULL(' + QUOTENAME(UPPER(o.Descripcion))+',0) AS '+QUOTENAME(UPPER(o.Descripcion))
				FROM		Obligacion o
				ORDER BY	o.CodObligacionTipo,o.orden ASC
				FOR XML PATH(''), TYPE
			).value('.', 'NVARCHAR(MAX)'),1,1,'')
	
	
	set @Consulta = '
	SELECT subQuery.* 
	--INTO [##Obligaciones_Temporal]
	FROM
		(	
			SELECT 
				 CodRecaudo AS [RECAUDO]
				,FechaGrab AS [FECHA]
				,CodCartulinaEstado AS [ESTADO]
				,CodCartulina AS [CODIGO CARTULINA]
				,CodPlaca AS [PLACA]
				,ValorCartulina AS [VALOR]
				,ValorTransMasivo AS [VALOR TRANS MASIVO]
				,' + @Consulta_ISNULL + ' 
				,ValorObligaciones AS [TOTAL OBLIGACIONES]
				,ValorUtilidad AS [ADMINISTRACION]
				FROM 
				 (
					SELECT 
						 r.CodRecaudo
						,co.CodCartulina
						,c.ValorCartulina
						,c.ValorTransMasivo
						,c.ValorObligaciones
						,c.ValorUtilidad
						,r.CodPlaca
						,r.FechaGrab
						,o.Descripcion
						,co.ValorObligacion
						,c.CodCartulinaEstado
					FROM 
						Obligacion o        
						INNER JOIN Cartulina_Obligacion co
							ON o.CodObligacion=co.CodObligacion
						INNER JOIN Cartulina c
							ON co.CodCartulina=c.CodCartulina
						INNER JOIN recaudo r
							ON r.CodRecaudo=c.CodRecaudo
					WHERE	 
						CONVERT(VARCHAR,r.FechaGrab,111) BETWEEN '''+CONVERT(VARCHAR,@Fecha_Ini,111)+'''  AND '''+CONVERT(VARCHAR,@Fecha_Fin,111)+'''
				) x
				pivot 
				(
					MAX(ValorObligacion)
					for Descripcion in (' + @Consulta + ')
				) p 			
		) subQuery
	ORDER BY
		FECHA DESC
	'	
	--print @Consulta	
	exec sp_executesql @Consulta
	--select * from [##Obligaciones_Temporal]	
	RETURN 0
END

--- Si se llega a este punto es porque el @OP indicado no Existe en el Procedimiento Almacenado
IF @OP IS NOT NULL
	BEGIN
	SET @ParamAuxiliar='La Operacion "'+@OP+'" No esta definida en el Procedimiento almacenado "'+OBJECT_NAME(@@PROCID)+'", Revise!.'
	RAISERROR(@ParamAuxiliar,16,1)
	RETURN 1
END

--- CONTROLAR Y REGISTRAR LOS ERRORES
END TRY
BEGIN CATCH
	--- Recopilo la informacion del error
	DECLARE @ERROR_NUMBER INT=ERROR_NUMBER(),@ERROR_SEVERITY INT=ERROR_SEVERITY(),@ERROR_STATE INT=ERROR_STATE(),@ERROR_PROCEDURE VARCHAR(128)=ISNULL(ERROR_PROCEDURE(),OBJECT_NAME(@@PROCID)),@ERROR_LINE INT=ERROR_LINE(),@ERROR_MESSAGE VARCHAR(4096)=ERROR_MESSAGE()
	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT
	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
	--- Ejecuto el SP que controla y registra el error
	EXEC [spSeguridadMessageException] @OP='MostrarMensaje',@ERROR_NUMBER=@ERROR_NUMBER,@ERROR_SEVERITY=@ERROR_SEVERITY,@ERROR_STATE=@ERROR_STATE,@ERROR_PROCEDURE=@ERROR_PROCEDURE,@ERROR_LINE=@ERROR_LINE,@ERROR_MESSAGE=@ERROR_MESSAGE
	RETURN 1
END CATCH;
